import 'package:extended_text_library/extended_text_library.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

class MySpecialTextSpanBuilder extends SpecialTextSpanBuilder {
  @override
  SpecialText? createSpecialText(String flag,
      {TextStyle? textStyle, onTap, int? index}) {
    if (flag == null || flag == '') {
      return null;
    }
    if (isStart(flag, EmojiText.flag)) {
      return EmojiText(textStyle,
          start: (index ?? 0) - (EmojiText.flag.length - 1));
    }
    return null;
  }

}

///emoji/image text
class EmojiText extends SpecialText {
  EmojiText(TextStyle? textStyle, {this.start})
      : super(EmojiText.flag, ']', textStyle);
  static const String flag = '[';
  final int? start;

  @override
  InlineSpan finishText() {
    final String key = toString();

    ///https://github.com/flutter/flutter/issues/42086
    /// widget span is not working on web
    if (ExpressionData.maps.containsKey(key)) {
      //fontsize id define image height
      const size = 30.0/26.0 * 20;
      // const double size = 20.0;

      print('${ExpressionData.maps[key]}');
      return ImageSpan(
          AssetImage(
            'asset/expression/${ExpressionData.maps[key]}',
          ),
          actualText: key,
          imageWidth: size,
          imageHeight: size,
          start: start!,
          // fit: BoxFit.fill,
          // margin: const EdgeInsets.only(left: 2.0, top: 2.0, right: 2.0)
      );
    }

    return TextSpan(text: toString(), style: textStyle);
  }
}

class EmojiUitl {
  EmojiUitl._() {
    for (int i = 1; i < 49; i++) {
      _emojiMap['[$i]'] = '$_emojiFilePath/$i.png';
    }
  }

  final Map<String, String> _emojiMap = <String, String>{};

  Map<String, String> get emojiMap => _emojiMap;

  final String _emojiFilePath = 'asset';

  static EmojiUitl? _instance;

  static EmojiUitl get instance => _instance ??= EmojiUitl._();
}

///表情对象
class Expression {
  final String name;
  final String path;

  ///标识是否是emoji表情,true是,默认false
  final bool isEmoji;

  Expression(this.name, this.path, {this.isEmoji = false});
}

///数据类
class ExpressionData {
  ///基础路径
  static String basePath = "asset/expression/";

  static final Map<String, String> maps = {
    '[微笑]': 'hehe.png',
    '[撇嘴]': 'piezui.png',
    '[色]': 'se.png',
    '[发呆]': 'fadai.png',
    '[得意]': 'deyi.png',
    '[流泪]': 'liulei.png',
    '[害羞]': 'haixiu.png',
    '[闭嘴]': 'bizui.png',
    '[睡]': 'shui.png',
    '[大哭]': 'daku.png',
    '[尴尬]': 'ganga.png',
    '[发怒]': 'fanu.png',
    '[调皮]': 'tiaopi.png',
    '[呲牙]': 'ciya.png',
    '[惊讶]': 'jingya.png',
    '[难过]': 'nanguo.png',
    '[囧]': 'jiong.png',
    '[抓狂]': 'zhuakuang.png',
    '[吐]': 'tu.png',
    '[偷笑]': 'touxiao.png',
    '[愉快]': 'yukuai.png',
    '[白眼]': 'baiyan.png',
    '[傲慢]': 'aoman.png',
    '[困]': 'kun.png',
    '[惊恐]': 'jingkong.png',
    '[流汗]': 'liuhan.png',
    '[憨笑]': 'hanxiao.png',
    '[悠闲]': 'youxian.png',
    '[奋斗]': 'fendou.png',
    '[咒骂]': 'zhouma.png',
    '[疑问]': 'yiwen.png',
    '[嘘]': 'xu.png',
    '[晕]': 'yun.png',
    '[衰]': 'sui.png',
    '[骷髅]': 'kulou.png',
    '[敲打]': 'qiaoda.png',
    '[再见]': 'zaininmadejian.png',
    '[擦汗]': 'cahan.png',
    '[抠鼻]': 'koubi.png',
    '[鼓掌]': 'guzhang.png',
    '[坏笑]': 'huaixiao.png',
    '[左哼哼]': 'zuohengheng.png',
    '[右哼哼]': 'youhengheng.png',
    '[哈欠]': 'haqian.png',
    '[鄙视]': 'bishi.png',
    '[委屈]': 'weiqu.png',
    '[快哭了]': 'kuaikule.png',
    '[阴险]': 'yinxian.png',
    '[亲亲]': 'qinqin.png',
    '[可怜]': 'kelian.png',
    '[菜刀]': 'caidao.png',
    '[西瓜]': 'xigua.png',
    '[啤酒]': 'pijiu.png',
    '[咖啡]': 'kafei.png',
    '[猪头]': 'zhutou.png',
    '[玫瑰]': 'meigui.png',
    '[凋谢]': 'diaoxie.png',
    '[嘴唇]': 'zuichun.png',
    '[爱心]': 'aixin.png',
    '[心碎]': 'xinsui.png',
    '[蛋糕]': 'dangao.png',
    '[炸弹]': 'zhadan.png',
    '[便便]': 'bianbian.png',
    '[月亮]': 'yueliang.png',
    '[太阳]': 'taiyang.png',
    '[拥抱]': 'yongbao.png',
    '[强]': 'qiang.png',
    '[弱]': 'ruo.png',
    '[握手]': 'woshou.png',
    '[胜利]': 'shengli.png',
    '[抱拳]': 'baoquan.png',
    '[勾引]': 'gouyin.png',
    '[拳头]': 'quantou.png',
    '[OK]': 'ok.png',
    '[跳跳]': 'tiaotiao.png',
    '[发抖]': 'fadou.png',
    '[怄火]': 'ohuo.png',
    '[转圈]': 'zhuanquan.png',
    '[嘿哈]': 'heiha.png',
    '[捂脸]': 'wulian.png',
    '[奸笑]': 'jianxiao.png',
    '[机智]': 'jizhi.png',
    '[皱眉]': 'zhoumei.png',
    '[耶]': 'ye.png',
    '[蜡烛]': 'lazhu.png',
    '[红包]': 'hongbao.png',
    '[吃瓜]': 'chigua.png',
    '[加油]': 'jiayou.png',
    '[汗]': 'han.png',
    '[天啊]': 'tiana.png',
    '[Emm]': 'emm.png',
    '[社会社会]': 'shehuishehui.png',
    '[旺柴]': 'wangchai.png',
    '[好的]': 'haode.png',
    '[打脸]': 'dalian.png',
    '[加油加油]': 'jiayoujiayou.png',
    '[哇]': 'wa.png',
    '[發]': 'fa.png',
    '[福]': 'fu.png',
    '[鸡]': 'ji.png'
  };

  ///表情路径
  static final List<Expression> expressionPath = [
    Expression('微笑', 'hehe.png'),
    Expression('撇嘴', 'piezui.png'),
    Expression('色', 'se.png'),
    Expression('发呆', 'fadai.png'),
    Expression('得意', 'deyi.png'),
    Expression('流泪', 'liulei.png'),
    Expression('害羞', 'haixiu.png'),
    Expression('闭嘴', 'bizui.png'),
    Expression('睡', 'shui.png'),
    Expression('大哭', 'daku.png'),
    Expression('尴尬', 'ganga.png'),
    Expression('发怒', 'fanu.png'),
    Expression('调皮', 'tiaopi.png'),
    Expression('呲牙', 'ciya.png'),
    Expression('惊讶', 'jingya.png'),
    Expression('难过', 'nanguo.png'),
    Expression('囧', 'jiong.png'),
    Expression('抓狂', 'zhuakuang.png'),
    Expression('吐', 'tu.png'),
    Expression('偷笑', 'touxiao.png'),
    Expression('愉快', 'yukuai.png'),
    Expression('白眼', 'baiyan.png'),
    Expression('傲慢', 'aoman.png'),
    Expression('困', 'kun.png'),
    Expression('惊恐', 'jingkong.png'),
    Expression('流汗', 'liuhan.png'),
    Expression('憨笑', 'hanxiao.png'),
    Expression('悠闲', 'youxian.png'),
    Expression('奋斗', 'fendou.png'),
    Expression('咒骂', 'zhouma.png'),
    Expression('疑问', 'yiwen.png'),
    Expression('嘘', 'xu.png'),
    Expression('晕', 'yun.png'),
    Expression('衰', 'sui.png'),
    Expression('骷髅', 'kulou.png'),
    Expression('敲打', 'qiaoda.png'),
    Expression('再见', 'zaininmadejian.png'),
    Expression('擦汗', 'cahan.png'),
    Expression('抠鼻', 'koubi.png'),
    Expression('鼓掌', 'guzhang.png'),
    Expression('坏笑', 'huaixiao.png'),
    Expression('左哼哼', 'zuohengheng.png'),
    Expression('右哼哼', 'youhengheng.png'),
    Expression('哈欠', 'haqian.png'),
    Expression('鄙视', 'bishi.png'),
    Expression('委屈', 'weiqu.png'),
    Expression('快哭了', 'kuaikule.png'),
    Expression('阴险', 'yinxian.png'),
    Expression('亲亲', 'qinqin.png'),
    Expression('可怜', 'kelian.png'),
    Expression('菜刀', 'caidao.png'),
    Expression('西瓜', 'xigua.png'),
    Expression('啤酒', 'pijiu.png'),
    Expression('咖啡', 'kafei.png'),
    Expression('猪头', 'zhutou.png'),
    Expression('玫瑰', 'meigui.png'),
    Expression('凋谢', 'diaoxie.png'),
    Expression('嘴唇', 'zuichun.png'),
    Expression('爱心', 'aixin.png'),
    Expression('心碎', 'xinsui.png'),
    Expression('蛋糕', 'dangao.png'),
    Expression('炸弹', 'zhadan.png'),
    Expression('便便', 'bianbian.png'),
    Expression('月亮', 'yueliang.png'),
    Expression('太阳', 'taiyang.png'),
    Expression('拥抱', 'yongbao.png'),
    Expression('强', 'qiang.png'),
    Expression('弱', 'ruo.png'),
    Expression('握手', 'woshou.png'),
    Expression('胜利', 'shengli.png'),
    Expression('抱拳', 'baoquan.png'),
    Expression('勾引', 'gouyin.png'),
    Expression('拳头', 'quantou.png'),
    Expression('OK', 'ok.png'),
    Expression('跳跳', 'tiaotiao.png'),
    Expression('发抖', 'fadou.png'),
    Expression('怄火', 'ohuo.png'),
    Expression('转圈', 'zhuanquan.png'),
    Expression('嘿哈', 'heiha.png'),
    Expression('捂脸', 'wulian.png'),
    Expression('奸笑', 'jianxiao.png'),
    Expression('机智', 'jizhi.png'),
    Expression('皱眉', 'zhoumei.png'),
    Expression('耶', 'ye.png'),
    Expression('蜡烛', 'lazhu.png'),
    Expression('红包', 'hongbao.png'),
    Expression('吃瓜', 'chigua.png'),
    Expression('加油', 'jiayou.png'),
    Expression('汗', 'han.png'),
    Expression('天啊', 'tiana.png'),
    Expression('Emm', 'emm.png'),
    Expression('社会社会', 'shehuishehui.png'),
    Expression('旺柴', 'wangchai.png'),
    Expression('好的', 'haode.png'),
    Expression('打脸', 'dalian.png'),
    Expression('加油加油', 'jiayoujiayou.png'),
    Expression('哇', 'wa.png'),
    Expression('發', 'fa.png'),
    Expression('福', 'fu.png'),
    Expression('鸡', 'ji.png'),
  ];
}
